#pragma once

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>

typedef int QDataType ;

// 定义队列的结构
// 队列的底层是由链表实现的
// 如何实现队列先进先出的结构呢?
// 我们定义两个指针指向队头和队尾可以了

typedef struct QueueNode
{
    
    QDataType data ;

    struct QueueNode* next ;

} QueueNode ;

// 队列的结构

typedef struct Queue
{

    QueueNode* phead ;

    QueueNode* ptail ;

    // int size ; // 获取队伍有效数据的个数(方法1)

} Queue ;

// 队列的初始化

void QueueInit (Queue* pq) ;

// 销毁队列

void QueueDestory (Queue* pq) ;

// 入队---队尾

void QueuePush (Queue* pq , QDataType x) ;

// 出队---队头

void QueuePop (Queue* pq) ;

// 队列判空

bool QueueEmpty (Queue* pq) ;

// 取队头数据

QDataType QueueFront (Queue* pq) ;

// 取队尾数据

QDataType QueueBack (Queue* pq) ;

// 队列有效元素个数

int QueueSize (Queue* pq) ;